﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

namespace huqiang.Core.UIData
{
    //public class HTexture
    //{
    //    public bool readOnly { get; private set; }
    //    public TextureFormat textureFormat { get; private set; }
    //    public int maxSpace { get; private set; }
    //    public int remainSpace { get; private set; }

    //    internal List<HSprite> hsprites;
    //    BitArray bitArray;
    //    public int SpriteWith { get; private set; }
    //    public int SpriteHeigt { get; private set; }
    //    public HSprite Sprite { get; private set; }
    //    int numW;
    //    int numH;
    //    Texture2D mainTex;
    //    public HTexture(Texture2D tex)
    //    {
    //        readOnly = true;
    //        mainTex = tex;
    //        textureFormat = mainTex.format;
    //        Sprite = new HSprite(this, new Rect(0, 0, mainTex.width, mainTex.height), tex.name);
    //    }
    //    public HTexture(Texture2D tex, string url)
    //    {
    //        readOnly = true;
    //        mainTex = tex;
    //        textureFormat = mainTex.format;
    //        Sprite = new HSprite(this, new Rect(0, 0, mainTex.width, mainTex.height), url);
    //    }
    //    public HTexture(Texture2D tex, Sprite[] sprites)
    //    {
    //        readOnly = true;
    //        mainTex = tex;
    //        textureFormat = mainTex.format;
    //        hsprites = new List<HSprite>();
    //        for (int i = 0; i < sprites.Length; i++)
    //        {
    //            var spr = new HSprite(this,sprites[i].rect);
    //            spr.Name = sprites[i].name;
    //            hsprites.Add(spr);
    //        }
    //    }
    //    public HTexture(int with,int high, int atlasWith = 128,int altasHeight=128)
    //    {
    //        hsprites = new List<HSprite>();
    //        readOnly = false;
    //        mainTex = new Texture2D(with,high,TextureFormat.RGBA32, false);
    //        textureFormat = TextureFormat.RGBA32;
    //        numW = with / atlasWith;
    //        numH = high / altasHeight;
    //        remainSpace = maxSpace = numW * numH;
    //        bitArray = new BitArray(maxSpace);
    //    }
    //    public HTexture(int with, int high, TextureFormat format, int atlasWith = 128, int altasHeight = 128)
    //    {
    //        hsprites = new List<HSprite>();
    //        readOnly = false;
    //        mainTex = new Texture2D(with, high, format, false);
    //        textureFormat = format;
    //        numW = with / atlasWith;
    //        numH = high / altasHeight;
    //        remainSpace = maxSpace = numW * numH;
    //        bitArray = new BitArray(maxSpace);
    //    }
    //    public HSprite FindSprite(string name)
    //    {
    //        if (hsprites == null)
    //        {
    //            Debug.LogError("此纹理不包含精灵!");
    //            return null;
    //        }
    //        for (int i = 0; i < hsprites.Count; i++)
    //        {
    //            if (hsprites[i].Name == name)
    //                return hsprites[i];
    //        }
    //        return null;
    //    }
    //    public HSprite AddSprite(Texture2D texture)
    //    {
    //        if(readOnly)
    //        {
    //            Debug.LogError("纹理不允许写入!");
    //            return null;
    //        }
    //        if (remainSpace < 0)
    //        {
    //            Debug.LogError("此纹理没有可用空间了!");
    //            return null;
    //        }
    //        var rects = mainTex.PackTextures(new[] { texture }, 1);
    //        if (rects != null)
    //        {
    //            HSprite sprite = new HSprite(this, rects[0]);
    //            sprite.Name = texture.name;
    //            hsprites.Add(sprite);
    //            return sprite;
    //        }
    //        return null;
    //    }
    //    public HSprite[] AddSpritse(Texture2D[] textures)
    //    {
    //        if (readOnly)
    //        {
    //            Debug.LogError("纹理不允许写入!");
    //            return null;
    //        }
    //        if (remainSpace < textures.Length)
    //        {
    //            Debug.LogError("此纹理没有可用空间了!");
    //            return null;
    //        }
    //        var rects = mainTex.PackTextures(textures , 1);
    //        if (rects != null)
    //        {
    //            var tmp = new HSprite[rects.Length];
    //            for (int i = 0; i < rects.Length; i++)
    //            {
    //                HSprite sprite = new HSprite(this, rects[0]);
    //                sprite.Name = textures[i].name;
    //                tmp[i] = sprite;
    //                hsprites.Add(sprite);
    //            }
    //        }
    //        return null;
    //    }
    //    public HSprite InsertTexture(Texture2D t2d)
    //    {
    //        if (readOnly)
    //        {
    //            Debug.LogError("纹理不允许写入!");
    //            return null;
    //        }
    //        if (remainSpace < 0)
    //        {
    //            Debug.LogError("此纹理没有可用空间了!");
    //            return null;
    //        }
    //        for(int i=0;i<maxSpace;i++)
    //            if(!bitArray[i])
    //            {
    //                int y= i / numW;
    //                int x = i % numW;
    //                int w = t2d.width;
    //                int h = t2d.height;
    //                if (mainTex.graphicsFormat == t2d.graphicsFormat)//格式相同,可快速复制
    //                {
    //                    Graphics.CopyTexture(t2d, 0, 0, 0, 0, w, h, mainTex, 0, 0, x, y);
    //                }
    //                else
    //                {
    //                    mainTex.SetPixels32(x, y, t2d.width, t2d.height, t2d.GetPixels32());
    //                }
    //                remainSpace--;
    //                Rect rect = new Rect(x + w * 0.5f, y + h * 0.5f, w, h);
    //                HSprite sprite = new HSprite(this, rect);
    //                sprite.Name = t2d.name;
    //                hsprites.Add(sprite);
    //                return sprite;
    //            }
    //        return null;
    //    }
    //}
}
